package py.com.sole.solesys;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.context.RequestContext;
import org.primefaces.event.SelectEvent;
import py.com.sole.dao.DaoFactory;
import py.com.sole.model.Proveedor;

@ManagedBean
@SessionScoped
public class ProveedorBean implements Serializable {

  /**
   *
   */
  private static final long serialVersionUID = -2342342342342L;
  private int id;
  private String razonSocial;
  private String ruc;
  private String telefono;
  private String direccion;
  private List<Proveedor> proveedores;
  private Proveedor proveedorSelected;
  private List<Proveedor> listaProvSelec;
  private boolean bloquearBotones = true;

  @PostConstruct
  private void init() {
    listaProvSelec = new ArrayList<Proveedor>();
    proveedores = DaoFactory.getProveedor().getProveedores();
  }

  public void clean() {
    this.razonSocial = null;
    this.ruc = null;
    this.telefono = null;
    this.direccion = null;
    this.proveedorSelected = null;
    this.bloquearBotones = true;

  }

  public void addProveedor() {
    FacesContext context = FacesContext.getCurrentInstance();

    Proveedor p = DaoFactory.getProveedor().getProveedorByName(razonSocial);
    
    if (p != null ) {
      context.addMessage(null, new FacesMessage("Advertencia",
                                                "La proveedor " + razonSocial
                                              + " ya se encuentra registrado"));
      this.clean();
      return;
    }

    Proveedor proveedor = new Proveedor();
    proveedor.setRazonSocial(razonSocial);
    proveedor.setRuc(ruc);
    proveedor.setTelefono(telefono);
    proveedor.setDireccion(direccion);
    proveedor.setActivo(true);
    DaoFactory.getProveedor().addProveedor(proveedor);
    context.addMessage(null, new FacesMessage("Mensaje", "Proveedor "
                                              + razonSocial + " almacenada exitosamente"));

    proveedores = DaoFactory.getProveedor().getProveedores();

    this.clean();
  }

  public void deleteProveedor() {
    //DaoFactory.getProveedor().deleteProveedor(this.getProveedorSelected().getId());
    Proveedor proveedor = DaoFactory.getProveedor().getProveedorById(
      this.getProveedorSelected().getId());

    FacesContext context = FacesContext.getCurrentInstance();

    proveedor.setRazonSocial(razonSocial);
    proveedor.setRuc(ruc);
    proveedor.setTelefono(telefono);
    proveedor.setDireccion(direccion);
    proveedor.setActivo(false);

    DaoFactory.getProveedor().updateProveedor(proveedor);
    context.addMessage(null, new FacesMessage("Mensaje", "Proveedor "
                                              + razonSocial + " eliminado exitosamente"));

    proveedores = DaoFactory.getProveedor().getProveedores();
    this.clean();
  }

  public void editProveedor() {
    Proveedor proveedor = DaoFactory.getProveedor().getProveedorById(
      this.getProveedorSelected().getId());

    FacesContext context = FacesContext.getCurrentInstance();

    proveedor.setRazonSocial(razonSocial);
    proveedor.setRuc(ruc);
    proveedor.setTelefono(telefono);
    proveedor.setDireccion(direccion);

    DaoFactory.getProveedor().updateProveedor(proveedor);
    context.addMessage(null, new FacesMessage("Mensaje", "Proveedor "
                                              + razonSocial + " almacenada exitosamente"));

    proveedores = DaoFactory.getProveedor().getProveedores();

    this.clean();
  }

  public void onRowSelect(SelectEvent event) {
    this.proveedorSelected = ((Proveedor) event.getObject());
    this.razonSocial = this.proveedorSelected.getRazonSocial();
    this.ruc = this.proveedorSelected.getRuc();
    this.telefono = this.proveedorSelected.getTelefono();
    this.direccion = this.proveedorSelected.getDireccion();

    this.bloquearBotones = false;
    RequestContext.getCurrentInstance().update("proveedor-form:dtProv");
  }

  public void searchProveedores() {
    List<Proveedor> proveedores = DaoFactory.getProveedor().getProveedores();

    if (proveedores.isEmpty()) {
      FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_WARN, "Resultado de la consulta", "No se encontraron registros");
      FacesContext.getCurrentInstance().addMessage(null, message);
    } else if (proveedores.size() == 1) {
      this.setRazonSocial(proveedores.get(0).getRazonSocial());
      this.setRuc(proveedores.get(0).getRuc());
      this.setTelefono(proveedores.get(0).getTelefono());
      this.setDireccion(proveedores.get(0).getDireccion());

      RequestContext.getCurrentInstance().update("proveedor-form");
    } else {
      this.proveedores = proveedores;
    }
  }

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public String getRazonSocial() {
    return razonSocial;
  }

  public void setRazonSocial(String razonSocial) {
    this.razonSocial = razonSocial;
  }

  public String getRuc() {
    return ruc;
  }

  public void setRuc(String ruc) {
    this.ruc = ruc;
  }

  public String getTelefono() {
    return telefono;
  }

  public void setTelefono(String telefono) {
    this.telefono = telefono;
  }

  public String getDireccion() {
    return direccion;
  }

  public void setDireccion(String direccion) {
    this.direccion = direccion;
  }

  public List<Proveedor> getProveedores() {
    proveedores = DaoFactory.getProveedor().getProveedores();
    return proveedores;
  }

  public void setProveedores(List<Proveedor> proveedores) {
    this.proveedores = proveedores;
  }

  public Proveedor getProveedorSelected() {
    return proveedorSelected;
  }

  public void setProveedorSelected(Proveedor proveedorSelected) {
    this.proveedorSelected = proveedorSelected;
  }

  public boolean isBloquearBotones() {
    return bloquearBotones;
  }

  public void setBloquearBotones(boolean bloquearBotones) {
    this.bloquearBotones = bloquearBotones;
  }

  public List<Proveedor> getListaProvSelec() {
    return listaProvSelec;
  }

  public void setListaProvSelec(List<Proveedor> listaProvSelec) {
    this.listaProvSelec = listaProvSelec;
  }
}
